It is known for processors to perform multi-tasking, in which a plurality of tasks appears to be executed by the processor at the same time. The processor does not actually execute the tasks at the same time—rather, it schedules the tasks for successive execution. The tasks have associated priorities and the scheduling is performed in accordance with these priorities such that a high priority task is to be executed before a low priority task. However, the current scheduling methods do not take into account the specific nature of the tasks that need to be executed; i.e. only generic task scheduling algorithms are used.
Media processing tasks (executing processing such as echo-cancelling, media encoding and data compression, or a series of such processing) often have soft real-time constraints, i.e. if the processing performed by such a media processing task is delayed or not performed at all, then this is not fatal to the task. This is due to the media processing tasks having an associated recovery mechanism—such as using a packet loss concealment algorithm when packets containing encoded media data are lost on a packet network or are not generated at all.
Additionally, media processing tasks often involve processing large amounts of data, storing large amounts of data in a processor memory and transferring large amounts of data between different processor memories. Indeed, it is often the case that the time taken to perform a media processing task can be as long as it takes to transfer the media task data into the processor's memory.
The current scheduling methods do not take these and other such features of media processing tasks into account. Therefore, the current scheduling methods are sub-optimal and may result in lower quality processed media data and/or fewer tasks being processed per unit time. It would therefore be desirable to be able to schedule such tasks in a more efficient manner.